/**
 * 判断一个字符串是否是纯数字
 * @param {String} str - 待判断的字符串
 * @return {Boolean}
 */
function isPureNumber(str) {
  return !isNaN(str);
}
/**
 * 判断一个字符串是否是手机号
 * @param {String} str - 待判断的字符串
 * @return {Boolean}
 */
function isPhone(str) {
  return /^1[3-9]\d{9}$/.test(str);
}
/**
 * 判断一个字符串是否是邮箱
 * @param {String} str - 待判断的字符串
 * @return {Boolean}
 */
function isEmail(str) {
  return /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(str);
}
/**
 * 判断一个字符串是否是身份证号
 * @param {String} str - 待判断的字符串
 * @return {Boolean}
 */
function isIdCard(str) {
  return /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(
    str
  );
}

function isNumber(str) {
  return !isNaN(str);
}

/**
 * 判断一个值是否为空
 * @param value: 待判断的值
 * @returns {boolean}
 */
function isEmpty(value) {
  if (value == null) {
    return true;
  }
  if (typeof value === "string") {
    return value.trim() === "";
  }
  if (typeof value === "number") {
    return value.toString().trim() === "";
  }
  if (Array.isArray(value)) {
    return value.length === 0;
  }
  if (typeof value === "object" && value.constructor === Object) {
    return Object.keys(value).length === 0;
  }
  // 对于其他类型（如函数、Date等），我们认为它们不是“空”的
  return false;
}

/**
 * 判断是否为对象
 * @param {any} val - 待判断的值
 * @returns {boolean|arg is any[]}
 */
function isObject(val) {
  return (
    (val && typeof val === "object" && !Array.isArray(val)) ||
    Array.isArray(val)
  );
}

export default {
  isEmpty,
  isObject,
  isPhone,
  isEmail,
  isIdCard,
  isPureNumber,
  isNumber,
};
